﻿Public Class xtf_ABMproveedorarticulo_ 
    Public obj_proveedorarticulo As cls_proveedorarticulo_ = Nothing
    Private col_ControlesValidar As List(Of Control)
    Dim dtt_proveedorarticulo_ As DataTable
    Dim modo As enu_modo

    Public Enum enu_modo As Integer
        articulo = 0
        proveedor = 1
    End Enum

    Private Sub cargarUnidadDetalle_(ByVal prm_unidad As cls_unidad_)
        cbo_unidaddetalle.Properties.Items.Clear()
        If Not IsNothing(prm_unidad.unidaddetalle_) Then
            cbo_unidaddetalle.Enabled = True
            For Each unidaddetealle As cls_unidaddetalle_ In prm_unidad.unidaddetalle_.Items
                cbo_unidaddetalle.Properties.Items.Add(unidaddetealle)
            Next
            cbo_unidaddetalle.SelectedIndex = 0
        Else
            cbo_unidaddetalle.Enabled = False
        End If
    End Sub

    Public Sub New(ByVal prm_modo As enu_modo, ByVal prm_unidad As cls_unidad_)
        InitializeComponent()
        PerzonalizarControles(lac_general.Items)
        CargarMoneda_()
        If Not IsNothing(prm_unidad) Then
            cargarUnidadDetalle_(prm_unidad)
        End If
        modo = prm_modo
        Me.Text = "Proveedor Articulo - Nuevo"
        lbl_fechaactual.Text = Now.Date.ToShortDateString
        obj_proveedorarticulo = New cls_proveedorarticulo_
        AgregarValidacionesGlobal(Me, Me.lac_general, col_ControlesValidar)

        Select Case modo
            Case enu_modo.proveedor
                lbl_Articulo.Text = "Proveedor"
        End Select

        'Prepara grid y datasource proveedorarticulo----------------------------------------------------
        gdv_proveedorarticulo_.Tag = New Collections.Generic.List(Of cls_proveedorarticulo_)
        dtt_proveedorarticulo_ = New DataTable
        dtt_proveedorarticulo_.Columns.Add("Fecha", GetType(DateTime))
        dtt_proveedorarticulo_.Columns.Add("Valor", GetType(Decimal))
        dtt_proveedorarticulo_.Columns.Add("Unidad", GetType(String))
        dtt_proveedorarticulo_.Columns.Add("Moneda", GetType(String))

        gdc_proveedorarticulo_.DataSource = dtt_proveedorarticulo_
        gdc_proveedorarticulo_.ForceInitialize()
        gdv_proveedorarticulo_.PopulateColumns()
        '-----------------------------------------------------------------------------------------------

    End Sub

    Private Sub CargarMoneda_()
        Dim Moneda_ As New cls_moneda_
        Dim Elemento As New CustomListItem
        If Moneda_.CargarTodos Then
            For Each Moneda As cls_moneda_ In Moneda_.Items
                Elemento = New CustomListItem
                Elemento.text = Moneda.ToString
                Elemento.objeto = Moneda
                cbo_moneda.Properties.Items.Add(Elemento)
            Next
            cbo_moneda.SelectedIndex = 0
        Else
            cbo_moneda.Enabled = False
        End If
    End Sub

    Public Sub Modificar(ByRef proveedorarticulo As cls_proveedorarticulo_)
        If IsNothing(obj_proveedorarticulo) Then
            obj_proveedorarticulo = New cls_proveedorarticulo_
        End If
        obj_proveedorarticulo = proveedorarticulo

        Me.Text = "Proveedor Articulo - " & obj_proveedorarticulo.ToString
        'txt_ID.Text = obj_localidad.idlocalidad
        Select Case modo
            Case enu_modo.proveedor
                txt_articulo.Text = obj_proveedorarticulo.proveedor.ToString
                txt_articulo.Tag = obj_proveedorarticulo.proveedor
            Case enu_modo.articulo
                txt_articulo.Text = obj_proveedorarticulo.articulo.ToString
                txt_articulo.Tag = obj_proveedorarticulo.articulo
                cargarUnidadDetalle_(obj_proveedorarticulo.articulo.unidad)
        End Select
        
        CargarHitorial()
        txt_Codigo.Text = obj_proveedorarticulo.codigo
        txt_Descripcion.Text = obj_proveedorarticulo.descripcion

        If obj_proveedorarticulo.idunidaddetalle <> 0 Then
            For Each Elemento As cls_unidaddetalle_ In cbo_unidaddetalle.Properties.Items
                If Elemento.idunidaddetalle = obj_proveedorarticulo.idunidaddetalle Then
                    cbo_unidaddetalle.SelectedItem = Elemento
                    Exit For
                End If
            Next
        End If

        If Not IsNothing(obj_proveedorarticulo.unidaddetalle) Then
            txt_Valor.Text = obj_proveedorarticulo.unidaddetalle.CValCargar(obj_proveedorarticulo.valor)
        Else
            txt_Valor.Text = obj_proveedorarticulo.valor
        End If


        If IsNothing(obj_proveedorarticulo.registro) Then
            lbl_fechaactual.Text = Now.Date.ToShortDateString
        Else
            lbl_fechaactual.Text = obj_proveedorarticulo.fecha
        End If


        If obj_proveedorarticulo.idmoneda <> 0 Then
            For Each Elemento As CustomListItem In cbo_moneda.Properties.Items
                Dim Moneda As cls_moneda_ = Elemento.objeto
                If Not IsNothing(Moneda) Then
                    If Moneda.idmoneda = obj_proveedorarticulo.idmoneda Then
                        cbo_moneda.SelectedItem = Elemento
                    End If
                End If
            Next
        End If

        obj_proveedorarticulo.articulo = Nothing
        obj_proveedorarticulo.moneda = Nothing
        obj_proveedorarticulo.registro = Nothing
        obj_proveedorarticulo.proveedor = Nothing
        obj_proveedorarticulo.unidaddetalle = Nothing
    End Sub

    Public Function ComprobarDatos() As Boolean
        If Not cbo_moneda.Enabled Then
            ErrManagerShow("001015", Me)
            Return False
        End If
        If Not ControlarValidacionesGlobal(col_ControlesValidar) Then
            ErrManagerShow("000004", Me)
            Return False
        End If
        Return True
    End Function

    Private Sub btn_Guardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Guardar.Click
        If ComprobarDatos() Then

            obj_proveedorarticulo.idmoneda = CType(cbo_moneda.SelectedItem.objeto, cls_moneda_).idmoneda

            Select Case modo
                Case enu_modo.articulo
                    obj_proveedorarticulo.idarticulo = CType(txt_articulo.Tag, cls_articulo_).idarticulo
                Case enu_modo.proveedor
                    obj_proveedorarticulo.idproveedor = CType(txt_articulo.Tag, cls_proveedor_).idproveedor
            End Select

            obj_proveedorarticulo.valor = CType(cbo_unidaddetalle.SelectedItem, cls_unidaddetalle_).CValGuardar(txt_Valor.Text)

            obj_proveedorarticulo.idunidaddetalle = CType(cbo_unidaddetalle.SelectedItem, cls_unidaddetalle_).idunidaddetalle

            obj_proveedorarticulo.codigo = txt_Codigo.Text
            obj_proveedorarticulo.descripcion = txt_Descripcion.Text
            obj_proveedorarticulo.fecha = lbl_fechaactual.Text
            'obj_proveedorarticulo.valor = txt_Valor.Text

            Me.DialogResult = Windows.Forms.DialogResult.OK
        End If
    End Sub

    Private Sub btn_Cerrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Cerrar.Click
        Me.DialogResult = Windows.Forms.DialogResult.Cancel
    End Sub

    Private Sub txt_articulo_ButtonClick(ByVal sender As Object, ByVal e As DevExpress.XtraEditors.Controls.ButtonPressedEventArgs) Handles txt_articulo.ButtonClick
        Dim buscar As xtf_buscardor
        Select Case modo
            Case enu_modo.articulo
                Dim articulo_ As New cls_articulo_
                articulo_.CargarTodos()
                buscar = New xtf_buscardor("Articulos", articulo_, {"nombre|Nombre", "codigo|Codigo", "descripcion|Descripcion"})
            Case enu_modo.proveedor
                Dim proveedor_ As New cls_proveedor_
                proveedor_.CargarTodos(True)
                buscar = New xtf_buscardor("Proveedores", proveedor_, {"razonsocial|Razon Social", "codigo|Codigo"})
        End Select
        If buscar.ShowDialog() = Windows.Forms.DialogResult.OK Then
            txt_articulo.Text = buscar.obj_resultado.ToString
            txt_articulo.Tag = buscar.obj_resultado
            CargarHitorial()
            Select Case modo
                Case enu_modo.articulo
                    cargarUnidadDetalle_(buscar.obj_resultado.unidad)
            End Select
        End If
        txt_Codigo.Focus()
    End Sub

    Private Sub CargarHitorial()
        dtt_proveedorarticulo_.Rows.Clear()
        Dim obj_proveedorarticulo_ As New cls_proveedorarticulo_
        Select Case modo
            Case enu_modo.articulo
                obj_proveedorarticulo_.CargarTodosXidproveedorXidarticulo(obj_proveedorarticulo.idproveedor, CType(txt_articulo.Tag, cls_articulo_).idarticulo)
            Case enu_modo.proveedor
                obj_proveedorarticulo_.CargarTodosXidproveedorXidarticulo(CType(txt_articulo.Tag, cls_proveedor_).idproveedor, obj_proveedorarticulo.idarticulo)
        End Select
        If Not IsNothing(obj_proveedorarticulo_.Items) Then
            gdv_proveedorarticulo_.BeginDataUpdate()
            For Each obj As cls_proveedorarticulo_ In obj_proveedorarticulo_.Items
                Dim Item As DataRow = dtt_proveedorarticulo_.NewRow
                Item("Fecha") = obj.fecha.ToShortDateString
                Item("Valor") = obj.unidaddetalle.CValCargar(obj.valor)
                Item("Unidad") = obj.unidaddetalle.ToString
                Item("Moneda") = obj.moneda.simbolo
                dtt_proveedorarticulo_.Rows.Add(Item)
            Next
            gdv_proveedorarticulo_.Columns("Fecha").SortOrder = DevExpress.Data.ColumnSortOrder.Descending
            gdv_proveedorarticulo_.EndDataUpdate()
        End If
    End Sub

    Private Sub txt_articulo_EditValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt_articulo.EditValueChanged

    End Sub
End Class